iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
Software Development

30 天到底能寫多少 Leetcode系列 第 10

[Day10] 從 0-1 背包進化到完全背包

  • 分享至 

  • xImage
  •  

0-1 背包和完全背包的差別在於:東西是不是可以重複拿取。如果可以取多次的話,一個物品取不同次的情況也要一併考慮進去。

279. Perfect Squares 這題需要先把題目轉成 dp 相關概念再去解,這邊遵循 dp 的慣例,一個維度放可選取的物品數,另一個維度記錄 weight(選取的數字總和),而 value 則代表在目前的 weight 下的最佳解(該數字最少可以由幾個平方數組成)。value 和以前習慣的有點不同,我們希望越小越好。

而遵照上面的規則不停比較、記錄優化結果,最後就可以得到答案了。

class Solution:
    def numSquares(self, n: int) -> int:
        arr = [i for i in range(n+1)]
        mx = int(sqrt(n))
        item = [i**2 for i in range(1, mx+1)]

        for i in range(len(item)):
            tmp = item[i]
            j = tmp
            while j <= n:
                arr[j] = min(arr[j], arr[j-tmp]+1)
                j += 1
        
        return arr[-1]


  • Total Count: 12
    • 是說今天晚上有一陣子鐵人邦掛掉(是在更新嗎),一整個驚嚇到不行QQ

上一篇
[Day9] 念 DP 從 0-1 背包開始
下一篇
[Day11] 0-1 背包和完全背包的中介點:多重背包
系列文
30 天到底能寫多少 Leetcode21
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言